就跟噴火龍一樣,要成為完整的 Vue 實體,要先從蛋 → 小火龍 → 火恐龍 → 噴火龍一步一步進化與成長。在我們享受 vue 有如噴火龍的大字爆炎強大功能時,其實每次 Vue 實例都要經過蛋、小火龍跟火恐龍的成長階段。
而且,在成長階段中,我們還可以指定 Vue 還是小火龍的階段時,先做些什麼事情(學賣萌之類的)。到火恐龍的階段時,再做什麼事情(耍中二之類的)。當然到了噴火龍階段,你還可以使他進行許多的變化,例如裝備道具、學新招式、Mega 進化成 Mega 噴火龍 X 或 Mega 噴火龍 Y。
經過一番激鬥之後,任務完成,體會了生命的意義,噴火龍壽終正寢。
「我的人生,過得實在太充實美妙啦!」
不過我得承認這個比喻非常不精準,因為我之前認識到 Vue 可能會把火恐龍的階段的事情先做了,但小火龍階段的事情還沒做好,導致程式出錯。寫程式時還需要額外處理。
正式來說,Vue 實體被初始化之前直到完成,有以下過程,在每個粗體字所顯示的掛鉤中,我們都可以在裡面寫程式碼,讓各個階段準備好我們需要的資料與運算,讓小火龍順利進化成噴火龍。
el
,template
等等)準備好加入 DOM 之前mounted
算是最常用到的,例如 AJAX 取得 JSON 資料時的程式碼就可以考慮放在 mounted
掛勾。let vm = new Vue({
el: '#app',
data: {
getJson: [], // 把從遠處 JSON 得來的資料放在這
},
mounted(){
const that = this; // 作用域問題,賦予 that 一個 this 的意思
const api = ' JSON 網址 '; // 要從哪裡得到資料
$.get(api).then(function(response) { // 用 jQuery 函式庫去取得 JSON 資料
that.getJson = response; // 把得來的資料放進 Vue 實例的 data 裡
});
},
})
這樣子,Vue 實體渲染頁面時,就可以自動依據data
內資料渲染頁面,使用我們之前學過的 v-for
、v-text
、v-on
等等功能。不用特地做個按鈕,按下去才去從遠端找資料,才渲染畫面。
不只是剛剛的掛勾,當輸出到 DOM 的資料有變動,還有整個 Vue 實體銷毀的時候,還會有以下四個掛勾。
不過今天或許會突然想說:我沒有要讓我的噴火龍安心去世啊!我只是想暫時「藏起來」而已,因為待會可能還會再用到,而且甚至還要預留保存使用者已經輸入的資料。
這得到「Vue 元件」的<keep-alive>
講解,這裡先知道大概就好:的確,是可以透過<keep-alive>
保持實體的狀態,而且可以在mounted
之後進入activated
掛勾,需要時維持activated
,隱藏時進入deactivated
掛勾。
keep-alive
元件啟用時,重複啟用元件時也會重新觸發一次,不會全局刷新 vue.js,所以created
也不會再被觸發。keep-alive
元件停用時,隱藏且緩存資料,避免重新被渲染。此文諸多不周到的地方還請各方大大多多包涵指教。